package intelligentCustomer.session;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用户会话类
 * 管理单个用户的对话历史和会话状态
 */
public class UserSession {
    /** 用户唯一标识 */
    private final String userId;
    
    /** 对话历史记录列表 */
    private final List<Message> history = new ArrayList<Message>();
    
    /** 会话属性，存储会话相关的各种状态数据 */
    private Map<String, Object> sessionAttributes = new HashMap<>();
    
    /** 是否启用调试模式 */
    private boolean debugMode = false;
    
    /**
     * 构造函数
     * 
     * @param userId 用户唯一标识
     */
    public UserSession(String userId) {
        this.userId = userId;
    }
    
    /**
     * 添加消息到对话历史
     * 
     * @param message 消息对象
     */
    public void addMessage(Message message) {
        if (history.size() >= 20) { // 限制历史消息数量，防止内存溢出
            history.remove(0);
        }
        history.add(message);
    }
    
    /**
     * 获取对话历史
     * 
     * @return 消息历史列表
     */
    public List<Message> getHistory() {
        return history;
    }
    
    /**
     * 获取用户ID
     * 
     * @return 用户唯一标识
     */
    public String getUserId() {
        return userId;
    }
    
    /**
     * 设置会话属性
     * 
     * @param key 属性键
     * @param value 属性值
     */
    public void setAttribute(String key, Object value) {
        sessionAttributes.put(key, value);
    }
    
    /**
     * 获取会话属性
     * 
     * @param key 属性键
     * @return 属性值
     */
    public Object getAttribute(String key) {
        return sessionAttributes.get(key);
    }
    
    /**
     * 设置调试模式
     * 
     * @param enabled 是否启用调试模式
     */
    public void setDebugMode(boolean enabled) {
        this.debugMode = enabled;
    }
    
    /**
     * 获取调试模式状态
     * 
     * @return 是否启用调试模式
     */
    public boolean isDebugMode() {
        return debugMode;
    }
}